﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using TrustX.Dados;

namespace AcadPos.Data
{
    public class DBCalendario
    {
        #region Listar Calendário por Polo e período
        public DataTable listarCalendario(int pPolo, DateTime pDataIni, DateTime pDataFim)
        {
            string SQL = @"SELECT tc.ID_CALENDARIO,
                                           tp.DESCRICAO AS POLO,
                                           CONVERT(VARCHAR,tc.DATA_AULA,103) AS DATA_AULA,
                                           tc.SITUACAO
                                    FROM   TB_CALENDARIO tc
                                           JOIN TB_POLO tp
                                                ON  tp.ID_POLO = tc.ID_POLO
                                    WHERE  tc.ID_POLO = @ID_POLO
                                           AND tc.DATA_AULA >= @DATA_INI AND tc.DATA_AULA <= @DATA_FIM";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ID_POLO", SqlDbType.Int, pPolo);
            db.AddParam("@DATA_INI", SqlDbType.DateTime, pDataIni);
            db.AddParam("@DATA_FIM", SqlDbType.DateTime, pDataFim);
            return db.GetDataTable();
        }
        #endregion

        #region Listar Horário por Calendário
        public DataTable listarHorariosXCalendario(int pIdCalendario)
        {
            string SQL = @"SELECT tch.ID_CALENDARIO_HORARIO,
                                   th.ID_HORARIO,
                                   CASE th.TURNO
                                        WHEN 'M' THEN 'MANHÃ'
                                        WHEN 'T' THEN 'TARDE'
                                        WHEN 'N' THEN 'NOITE'
                                   END AS TURNO,
                                   CONVERT(VARCHAR(8), th.HORA_INICIO) AS HORA_INICIO,
                                   CONVERT(VARCHAR(8), th.HORA_FIM) AS HORA_FIM
                            FROM   TB_CALENDARIO_HORARIO tch
                                   JOIN TB_HORARIO th
                                        ON  th.ID_HORARIO = tch.ID_HORARIO
                            WHERE  ID_CALENDARIO = @ID_CALENDARIO
                                   AND th.SITUACAO = 'A'";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ID_CALENDARIO", SqlDbType.Int, pIdCalendario);
            return db.GetDataTable();
        }
        #endregion

        #region Get Calendário
        public DataTable getCalendario(int pIdCalendario)
        {
            string SQL = @"SELECT tc.ID_POLO,
                               tc.DATA_AULA,
                               tc.SITUACAO
                        FROM   TB_CALENDARIO tc
                        WHERE  tc.ID_CALENDARIO = @ID_CALENDARIO";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ID_CALENDARIO", SqlDbType.Int, pIdCalendario);
            return db.GetDataTable();
        }
        #endregion

        #region Listar Horários
        public DataTable listaHorarios()
        {
            string SQL = @"SELECT th.ID_HORARIO,
                                  CASE th.TURNO
                                    WHEN 'M' THEN 'MANHÃ'
                                    WHEN 'T' THEN 'TARDE'
                                    WHEN 'N' THEN 'NOITE'
                               END AS TURNO,
                               CONVERT(VARCHAR(8), th.HORA_INICIO) AS HORA_INICIO,
                               CONVERT(VARCHAR(8), th.HORA_FIM) AS HORA_FIM
                        FROM   TB_HORARIO th
                        WHERE  th.SITUACAO = 'A'
                        ORDER BY th.TURNO,th.HORA_INICIO, th.HORA_FIM";
            DataAccess db = new DataAccess(SQL);
            return db.GetDataTable();
        }
        #endregion

        #region Inserir Data Calendário
        public bool inserirDataCalendario(int pIdPolo, DateTime pData, string pSituacao, string usuario)
        {
            string SQL = @"INSERT INTO TB_CALENDARIO
                              (
                                ID_POLO,
                                DATA_AULA,
                                SITUACAO,
                                DATA_CADASTRO
                              )
                            VALUES
                              (
                                @ID_POLO,
                                @DATA_AULA,
                                @SITUACAO,
                                GETDATE()
                              )";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ID_POLO", SqlDbType.Int, pIdPolo);
            db.AddParam("@DATA_AULA", SqlDbType.Date, pData);
            db.AddParam("@SITUACAO", SqlDbType.VarChar, pSituacao);

            //return db.ExecuteNonQuery();

            bool inseriu = db.ExecuteNonQuery();

            if (inseriu)
            {
                SQL = @"INSERT INTO TB_AUDITORIA
                      (
                        ACAO,
                        TABELA,
                        DESCRICAO,
                        USUARIO,
                        DATA                                    
                      )
                    VALUES
                      (                                     
                        'INSERT',
                        'TB_CALENDARIO',
                        (SELECT (SELECT CAST(MAX(ID_CALENDARIO) AS VARCHAR) FROM TB_CALENDARIO)
	                    + ' | ' + CAST(@ID_POLO AS VARCHAR)
                        + ' | ' + CONVERT(VARCHAR, @DATA_AULA, 103)
                        + ' | ' + UPPER(@SITUACAO)),                        
                        UPPER(@USUARIO),
                        GETDATE()
                      )";

                db = new DataAccess(SQL);

                db.AddParam("@ID_POLO", SqlDbType.Int, pIdPolo);
                db.AddParam("@DATA_AULA", SqlDbType.Date, pData);
                db.AddParam("@SITUACAO", SqlDbType.VarChar, pSituacao);
                db.AddParam("@USUARIO", SqlDbType.VarChar, usuario);
            }

            db.ExecuteNonQuery();
            return inseriu;

        }
        #endregion

        #region Excluir Data Calendário
        public bool excluirDataCalendario(int pIdCalendario, int idPolo, DateTime data, string situacao, string usuario)
        {
            string SQL = @"DELETE 
                            FROM   TB_CALENDARIO
                            WHERE  ID_CALENDARIO = @ID_CALENDARIO";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ID_CALENDARIO", SqlDbType.Int, pIdCalendario);
            db.AddParam("@ID_POLO", SqlDbType.Int, idPolo);
            db.AddParam("@DATA_AULA", SqlDbType.Date, data);
            db.AddParam("@SITUACAO", SqlDbType.VarChar, situacao);
            db.AddParam("@USUARIO", SqlDbType.VarChar, usuario);

            //return db.ExecuteNonQuery();

            bool excluiu = db.ExecuteNonQuery();

            if (excluiu)
            {
                SQL = @"INSERT INTO TB_AUDITORIA
                      (
                        ACAO,
                        TABELA,
                        DESCRICAO,
                        USUARIO,
                        DATA                                    
                      )
                    VALUES
                      (                                     
                        'DELETE',
                        'TB_CALENDARIO',
                        (SELECT CAST(@ID_CALENDARIO AS VARCHAR) 
	                    + ' | ' + CAST(@ID_POLO AS VARCHAR)
                        + ' | ' + CONVERT(VARCHAR, @DATA_AULA, 103)
                        + ' | ' + UPPER(@SITUACAO)),       
                        UPPER(@USUARIO),
                        GETDATE()
                      )";

                db = new DataAccess(SQL);

                db.AddParam("@ID_CALENDARIO", SqlDbType.Int, pIdCalendario);
                db.AddParam("@ID_POLO", SqlDbType.Int, idPolo);
                db.AddParam("@DATA_AULA", SqlDbType.Date, data.ToShortDateString());
                db.AddParam("@SITUACAO", SqlDbType.VarChar, situacao);
                db.AddParam("@USUARIO", SqlDbType.VarChar, usuario);
            }

            db.ExecuteNonQuery();
            return excluiu;
        }
        #endregion

        #region Alterar Data Calendário
        public bool alterarDataCalendario(int pIdCalendario, int pIdPolo, DateTime pData, string pSituacao, string usuario)
        {
            string SQL = @"UPDATE TB_CALENDARIO
                            SET    ID_POLO        = @ID_POLO,
                                   DATA_AULA      = @DATA_AULA,
                                   SITUACAO       = @SITUACAO
                            WHERE  ID_CALENDARIO  = @ID_CALENDARIO";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ID_POLO", SqlDbType.Int, pIdPolo);
            db.AddParam("@DATA_AULA", SqlDbType.Date, pData);
            db.AddParam("@SITUACAO", SqlDbType.VarChar, pSituacao);
            db.AddParam("@ID_CALENDARIO", SqlDbType.Int, pIdCalendario);

            //return db.ExecuteNonQuery();

            bool atualizou = db.ExecuteNonQuery();

            if (atualizou)
            {
                SQL = @"INSERT INTO TB_AUDITORIA
                      (
                        ACAO,
                        TABELA,
                        DESCRICAO,
                        USUARIO,
                        DATA                                    
                      )
                    VALUES
                      (                                     
                        'UPDATE',
                        'TB_CALENDARIO',
                        (CAST(@ID_CALENDARIO AS VARCHAR) 
                        + ' | ' + CAST(@ID_POLO AS VARCHAR)
                        + ' | ' + CONVERT(VARCHAR(10), @DATA_AULA, 103)
                        + ' | ' + UPPER(@SITUACAO)),                        
                        UPPER(@USUARIO),
                        GETDATE()
                      )";

                db = new DataAccess(SQL);

                db.AddParam("@ID_CALENDARIO", SqlDbType.Int, pIdCalendario);
                db.AddParam("@ID_POLO", SqlDbType.Int, pIdPolo);
                db.AddParam("@DATA_AULA", SqlDbType.Date, pData);
                db.AddParam("@SITUACAO", SqlDbType.VarChar, pSituacao);                
                db.AddParam("@USUARIO", SqlDbType.VarChar, usuario);
            }

            db.ExecuteNonQuery();
            return atualizou;
        }
        #endregion

        #region Inserir Horário
        public bool inserirHorario(int pIdCalendario, int pIdHorario)
        {
            string SQL = @"INSERT INTO TB_CALENDARIO_HORARIO
                          (
                            ID_CALENDARIO,
                            ID_HORARIO,
                            DATA_CADASTRO
                          )
                        VALUES
                          (
                            @ID_CALENDARIO,
                            @ID_HORARIO,
                            GETDATE()
                          )";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ID_CALENDARIO", SqlDbType.Int, pIdCalendario);
            db.AddParam("@ID_HORARIO", SqlDbType.Int, pIdHorario);
            return db.ExecuteNonQuery();
        }
        #endregion

        #region Excluir Horário do Calendário
        public bool excluirHorario(int pIdCalendarioHorario)
        {
            string SQL = @"DELETE 
                            FROM   TB_CALENDARIO_HORARIO
                            WHERE  ID_CALENDARIO_HORARIO = @ID_CALENDARIO_HORARIO";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ID_CALENDARIO_HORARIO", SqlDbType.Int, pIdCalendarioHorario);
            return db.ExecuteNonQuery();
        }
        #endregion

        public bool dataJaCadastrada(DateTime pData)
        {
            string SQL = @"SELECT ID_CALENDARIO  
                            FROM   TB_CALENDARIO
                            WHERE  CONVERT(VARCHAR, DATA_AULA, 103) = CONVERT(VARCHAR, @DATA_AULA, 103)";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@DATA_AULA", SqlDbType.DateTime, pData);

            return (bool)(db.ExecuteNonQuery() != null);
        }


        #region Listar Calendário por Polo e Mês
        public DataTable listarCalendario(int pPolo, int mes)
        {
            string SQL = @"SELECT tc.ID_CALENDARIO,
                                           tp.DESCRICAO AS POLO,
                                           CONVERT(VARCHAR,tc.DATA_AULA,103) AS DATA_AULA,
                                           th.HORA_INICIO,
                                           th.HORA_FIM,tch.ID_CALENDARIO_HORARIO, th.ID_HORARIO, tc.SITUACAO
                                    FROM   TB_CALENDARIO tc
                                           JOIN TB_POLO tp
                                                ON  tp.ID_POLO = tc.ID_POLO
                                           JOIN TB_CALENDARIO_HORARIO tch
                                                ON  tch.ID_CALENDARIO = tc.ID_CALENDARIO
                                           JOIN TB_HORARIO th
                                                ON  th.ID_HORARIO = tch.ID_HORARIO     
                                    WHERE  tc.ID_POLO = @ID_POLO
                                           AND MONTH(tc.DATA_AULA) = @MES";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ID_POLO", SqlDbType.Int, pPolo);
            db.AddParam("@MES", SqlDbType.Int, mes);
            
            return db.GetDataTable();
        }
        #endregion

        #region Inserir Cronograma
        public bool inserirCronograma(int idProfissionalDisciplina, int idCalendarioHorario)
        {
            string SQL = @"INSERT INTO TB_CRONOGRAMA
                            (
                            ID_PROFISSIONAL_DISCIPLINA,
                            ID_CALENDARIO_HORARIO                            
                            )
                        VALUES
                            (
                            @ID_PROFISSIONAL_DISCIPLINA,  
                            @ID_CALENDARIO_HORARIO
                            ) ";

            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ID_PROFISSIONAL_DISCIPLINA", SqlDbType.Int, idProfissionalDisciplina);
            db.AddParam("@ID_CALENDARIO_HORARIO", SqlDbType.Int, idCalendarioHorario);       
            return db.ExecuteNonQuery();
        }
        #endregion
    }
}
